Repository navigation
Drop the server tier: scope primitives-ts to the browser and Node scripts - #71
Merged
Merged
Conversation
…ode scripts No service is written in TypeScript — platform-go is the only server tier there is — so the packages whose reason to exist was sitting beside a database, a broker, an object store or a secret manager have no consumer here and never will. Code that needs to talk to a service built on platform-go belongs in platform-client-ts. Removes 13 packages: authentication (Argon2/token issuing), authorization, database, distributedlock, email, healthcheck (readiness probes over DB/cache/queue), idempotency, llm, messagequeue, notifications (apns/fcm/ably/pusher — all server-side *sending*), search, secrets, uploads (filesystem/s3/gcp sinks). No kept package imported a dropped one, so the cut is clean at the dependency level. featureflags and qrcodes were filed under "Server-only" but are kept and reclassified isomorphic and universal respectively; the server-only modality is gone from both README.md and CLAUDE.md, leaving universal and isomorphic. Verified uncached: build 24/24, typecheck 28/28, test 28/28, lint 28/28. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Sep 20, 2026
- Remove the pending changesets for authorization, database and idempotency — their packages left in the previous commit, so `changeset version` would have failed on releases that can no longer exist. - Add a release-neutral changeset for the removal itself. No kept package imported a dropped one, so no surviving package's code or public surface changed. - Rename the private workspace root to @primandproper/primitives-ts. - Reformat README.md (prettier). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Sep 20, 2026
testing: Redis-backed suites for cache, ratelimiting, distributedlock, messagequeue, idempotency
#47
Closed
verygoodsoftwarenotvirus
deleted the
chore/drop-server-tier-packages
branch
September 20, 2026 17:38
This was referenced Sep 20, 2026
verygoodsoftwarenotvirus
added a commit
that referenced
this pull request
Sep 20, 2026
* chore: remove identifiers — a client does not issue the server's IDs primitives-conformance turned up that the four ports disagree on what `identifiers` means: Go uses xid (rs/xid, 20 chars), Swift matches it, Kotlin generates 26-char ULIDs and this package generated 21-char nanoids. Go's Validate rejects the last two, so a TypeScript client generating an ID and sending it to a platform-go service is rejected at the door. The fix is not to reimplement xid in TypeScript. A client has no business generating a server's identifiers: the server issues them, the client receives opaque strings, and validating an ID the server just sent proves nothing. This is a server-tier package that survived #71 only because its name does not sound like infrastructure. Nothing imported it — its only consumer was idempotency, removed in #71 — so deleting the directory is the whole change. nanoid and ulid leave the dependency tree with it. Verified uncached: build 23/23, typecheck/test/lint 27/27, format clean. Closes #75 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: declare the removal as a changeset The changeset gate still guards main until the tag-driven release change lands, and a package leaving the workspace is worth a release note either way. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
No service is written in TypeScript —
platform-gois the only server tier there is. Packages whose reason to exist was sitting beside a database, a broker, an object store or a secret manager have no consumer in this module and never will. Anything that needs to talk to a service built onplatform-gobelongs inplatform-client-ts, not here.This is scope correction, not catch-up. The module was authored before the primitives/platform split had a name, back when "port platform" meant "port all of it".
What goes
authenticationauthorizationdatabasedistributedlockemailhealthcheckidempotencyllmmessagequeuenotificationsapns.node,fcm.node,ably.node,pusher.node— all server-side sendingsearchsecretsuploadsfilesystem/s3/gcpsinks; the client-side presign → PUT → confirm flow isplatform-client-ts's jobWhat stays, reclassified
featureflagsandqrcodeswere filed under Server-only but are kept — they move to isomorphic and universal respectively. With nothing left in it, the server-only modality is removed fromREADME.mdandCLAUDE.md, leaving universal and isomorphic.Notes for review
package.jsondeps and.tssource.primitives-gois deliberately partial — absent packages are out of scope, not pending.cache/providers/redis.node.ts,ratelimiting/providers/redis.node.ts(both pullingioredis), andfeatureflags'@launchdarkly/node-server-sdk/@openfeature/server-sdk. Trimming those changes public provider registries, so it wants its own PR and its own look.Verification
Uncached (turbo cache cleared,
--force): build 24/24 · typecheck 28/28 · test 28/28 · lint 28/28.🤖 Generated with Claude Code